package com.itany.task.task.task;

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
@EnableAsync
@EnableScheduling//开启定时任务
public class TestTask {


    /*
        cron表达式
        他是由若干数字空格特殊字符按照一定规则组合的字符串
        用于表示系统中的时间信息
        格式
            字符串一空格分割
            分割为6-7个域
            每个域代表一个时间含义
            秒 分 时 日 月 星期 年（可选）
            秒       0-59
            分       0-59
            时       0-23
            日       1-31
            月       1-12    JAN-DEC
            星期     1-7      SUN-SAT
            年       1970-2099

            特殊字符
            *       表示匹配任意值
            ?       表示匹配任意值，值用在星期和日两个域
            -       表示范围
            /       表示起始按周期触发
            ,       表示枚举
            L       表示最后
            W       表示有效工作日
            LW      表示最后一个工作日
            #       表示第几个月的星期几

            每个月1号三点执行                0 0 3 1 * ?
            周一到周五下午13:30执行          0 30 13 ? * 2-6
            每天10点，13点，14点执行         0 0 10,13,14 * * ?
            2024年每天10:15执行             0 15 10 * * ? 2024
            每天14点到14:59每分钟执行        0 * 14 * * ?
            每天14点到14:59每5分钟执行       0 0/5 14 * * ?
            每个月最后一个工作日15点执行      0 0 15 LW * ?
            每个月最后一个星期五10点执行      0 0 10 ? * 6L
            每个月5号工作日10点执行          0 0 10 5W * ?
            每个月第三个星期五10点执行        0 0 10 ? * 6#3


     */
    @Async("myExecutor")
    // @Scheduled(cron = "0 16 11 * * ?")
    // @Scheduled(cron = "${cron.expression}")
    // @Scheduled(cron = "#{cronBean.expression}")
    @Scheduled(cron = "#{cronBean.findExpression()}")
    public void f(){
        System.out.println("TestTask.f() "+Thread.currentThread().getName()+" "+new Date());
    }

}
